package com.crm.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.crm.entity.Sign;
import com.crm.entity.Student;
import com.crm.service.SignService;
import com.crm.util.PageUtil;
import com.crm.util.Result;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author crm
 * @since 2020-06-05
 */
@RestController//标注当前类是controller类，controller用 于处理客户端请求，加Rest表示当前类的所有方法都返回json数据，不走视图
@RequestMapping("sign")// 客户端请求地址
public class SignController {
    @Resource//设置注入方式，spring 自动在spring容器找到叫这个名或这个类型的对象，赋给当前属性，controller调 用service
    private SignService signService;//SignModule的业务层父接口

    /**
     * 签到签退
     *
     * @return 结果
     */
    @RequestMapping("/setQianDaoStatus")// 客户端请求地址
    public Object setQianDaoStatus(Sign sign) throws ParseException {//返 回值和方法名，object表示可以返回任何对象，因为object是任何对象的父对象，要父给子没问匙
        switch (sign.getSignState()) {
            case "已签到":
                if (sign.getSignState() == "已签到") {
                    return new Result(1, "您已签到，不能重复签到！！！");
                } else {
                    sign.setSignTime(new Date());
                    sign.setSignState("已签到");
                    boolean i = signService.save(sign);

                    if (i = true) {
                        return new Result(0, "签到成功");
                    } else {
                        return new Result(1, "签到失败");
                    }
                }

            case "已签退": // 签退的时候判断距离签到时间不能小于30分钟
                long qiandaoTime = signService.getSignTime(sign.getUid()).getSignTime().getTime();
                long date = new Date().getTime();
                long time = (date - qiandaoTime) / 60000;

                if (time > 30) {
                    sign.setSignState("已签退");
                    sign.setSignOutTime(new Date());

                    Sign signTime = signService.getSignTime(sign.getUid());
                    boolean updateById = signService.updateById(signTime);
                    if (updateById == true) {
                        return new Result(0, "签退成功");
                    } else {
                        return new Result(1, "签退失败");
                    }
                } else {
                    return new Result(1, "工作时间还不到30分钟，就想溜！");
                }

            default:
                return new Result(1, "不能重复操作");

        }
    }

    @RequestMapping("getSignByUid")// 客户端请求地址
    public Object getSignByUid(Integer uid) {
        signService.getById(uid);//调用mybatis plus的内 置service层方法getById()，查询某个数据
        if (signService.getSignTime(uid) == null) {

            return 0;
        }

        return signService.getSignTime(uid).getSignState();
    }

    /**
     * 调整分量顺序 全查 查询
     *
     * @return
     */
    @RequestMapping("getClock")// 客户端请求地址
    public Object getClock(PageUtil p, Sign sgin) {
        Page<Sign> page = new Page<Sign>(p.getPage(), p.getLimit());
        QueryWrapper<Sign> queryWrapper = new QueryWrapper<Sign>();//mybatis plus条件构造器queryWrapper
        if (sgin.getUid() != null) {
            queryWrapper.like("uid", sgin.getUid());
        }
        // 出入条件和分页数据，调用分页方法查询
        page = signService.page(page, queryWrapper);

        return new Result(0, "成功", page.getRecords(), page.getTotal());
    }

    /**
     * 签退
     *
     * @param sgin
     * @return
     */
    @RequestMapping("updateClock")// 客户端请求地址
    public Object updatesClock(Sign sgin) {
        
        long qiandaoTime = signService.getById(sgin.getSid()).getSignTime().getTime();
        long date = new Date().getTime();
        long time = (date - qiandaoTime) / 60000;

        if (time < 30) {
            return new Result(1, "工作时间还不到30分钟，就想溜！");
        }

        sgin.setSignOutTime(new Date());
        sgin.setSignState("已签退");
        boolean i = signService.updateById(sgin);
        if (i == true) {
            return new Result(0, "签退成功");
        }
        return new Result(1, "签退失败");
    }

    }
